外观
2024年6月 GESP C++ 二级真题解析
一、单选题 (每题2分,共30分)
单选题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | C | B | A | A | A | C | D | B | C | C | D | D | A | B | D |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?()
A. 1 B. 2 C. 3 D. 4
查看解析
答案:C
考纲知识点: GESP基础知识
解析: GESP认证考试一级目前提供三种语言选项:C++、Python和图形化编程(Scratch)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 下面流程图在yr输入2024时,可以判定yr代表闰年,并输出2月是29天,则图中菱形框中应该填入()。
A. (yr % 400 == 0 || yr % 4 == 0) B. (yr % 400 == 0 || (yr % 4 == 0 && yr % 100 != 0)) C. (yr % 400 == 0) && (yr % 4 == 0) D. (yr % 400 == 0) && (yr % 4 == 0 && yr % 100 != 0)
查看解析
答案:B
考纲知识点: 逻辑运算、闰年判断
解析: 闰年的判断标准是:能被400整除,或者能被4整除但不能被100整除。这个逻辑关系用C++表达式表示就是 (yr % 400 == 0) || (yr % 4 == 0 && yr % 100 != 0)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 在C++中,下列不可做变量的是()。
A. five-Star B. five_star C. fiveStar D. _fiveStar
查看解析
答案:A
考纲知识点: 变量的定义与使用
解析: C++的变量名只能包含字母、数字和下划线_。连字符-是不允许出现在变量名中的。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 在C++中,与for(int i = 0; i < 10; i++)效果相同的是()。
A. for(int i = 0; i < 10; i += 1) B. for(int i = 1; i <= 10; i++) C. for(int i = 10; i > 0; i--) D. for(int i = 10; i < 1; i++)
查看解析
答案:A
考纲知识点: 循环结构
解析: i++是i += 1的简写形式,两者完全等价。原循环遍历0到9,A选项也遍历0到9。B选项遍历1到10。C选项遍历10到1。D选项循环条件不满足,一次都不执行。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 在C++中,cout << (5 % 2 && 5 % 3);的输出是()。
A. 1 B. 2 C. true D. false
查看解析
答案:A
考纲知识点: 逻辑运算、基本运算
解析:
5 % 2的结果是1。5 % 3的结果是2。- 表达式变为
1 && 2。 - 在逻辑运算中,非零值被视为
true。所以表达式变为true && true。 true && true的结果是true。cout输出bool值true时,会显示为整数1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 执行下面的C++代码时输入1,则输出是()。
cpp
#include <iostream>
using namespace std;
int main() {
int month;
cin >> month;
switch(month) {
case 1:
cout << "Jan";
case 3:
cout << "Mar";
break;
default:
;
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
A. Jan B. Mar C. JanMar D. 以上均不对
查看解析
答案:C
考纲知识点: 分支结构
解析: switch语句的一个重要特性是“穿透”。当month为1时,程序会从case 1:开始执行,输出"Jan"。因为case 1:后面没有break;语句,程序会继续向下执行case 3:的代码,输出"Mar"。直到遇到break;才退出switch结构。所以最终输出是"JanMar"。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 执行下面C++代码后,有关说法错误的是()。
cpp
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (a && b)
cout << "1";
else if (!(a || b))
cout << "2";
else if (a || b)
cout << "3";
else
cout << "4";
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A. 如果先后输入1和1,则将输出1。 B. 如果先后输入0和1或者1和0,则将输出3。 C. 如果先后输入0和0,则将输出2。 D. 如果先后输入0和0,则将输出4。
查看解析
答案:D
考纲知识点: 逻辑运算、分支结构
解析:
if (a && b): 仅当a和b都为非零(真)时成立。输入1 1,输出"1"。A正确。else if (!(a || b)):!(a || b)等价于a == 0 && b == 0。仅当a和b都为0时成立。输入0 0,输出"2"。C正确,D错误。else if (a || b): 当a和b中至少有一个为非零时成立。输入0 1或1 0,第一个if不满足,第二个if不满足,此条件满足。输出"3"。B正确。- 最后的
else是永远不会被执行到的,因为前面几个条件覆盖了所有可能。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 某货币由5元,2元和1元组成。输入金额(假设为正整数),计算出最少数量。为实现其功能,横线处应填入代码是()。
cpp
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int M5, M2, M1;
M5 = N / 5;
M2 = ________;
M1 = ________;
printf("5*%d + 2*%d + 1*%d", M5, M2, M1);
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
A. 第1横线处应填入:N / 2,第2横线处应填入:N - M5 - M2 B. 第1横线处应填入:(N - M5 * 5) / 2,第2横线处应填入:N - M5 * 5 - M2 * 2 C. 第1横线处应填入:N - M5 * 5 / 2,第2横线处应填入:N - M5 * 5 - M2 * 2 D. 第1横线处应填入:(N - M5 * 5) / 2,第2横线处应填入:N - M5 - M2
查看解析
答案:B
考纲知识点: 问题分解、基本运算
解析: 这是典型的贪心算法。
M5 = N / 5;先计算出最多可以用多少张5元。N - M5 * 5是用掉5元后剩下的钱。M2 = (N - M5 * 5) / 2;用剩下的钱计算最多可以用多少张2元。N - M5 * 5 - M2 * 2是用掉5元和2元后最后剩下的钱,这部分必须全部用1元来凑。 所以B选项是正确的。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下面C++代码执行后的输出是()。
cpp
#include <iostream>
using namespace std;
int main() {
int loopCount = 0;
for(int i = 0; i < 10; i++) {
for(int j = 1; j < i; j++) {
loopCount += 1;
}
}
cout << loopCount;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
A. 55 B. 45 C. 36 D. 28
查看解析
答案:C
考纲知识点: 循环嵌套
解析:
- i=0: 内循环不执行
- i=1: 内循环不执行
- i=2: j=1, 执行1次
- i=3: j=1,2, 执行2次
- i=4: j=1,2,3, 执行3次
- ...
- i=9: j=1..8, 执行8次 总次数 =
0+0+1+2+3+4+5+6+7+8 = 36。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下面C++代码执行后的输出是()。
cpp
#include <iostream>
using namespace std;
int main() {
int loopCount = 0;
for(int i = 0; i < 10; i++) {
for(int j = 0; j < i; j++) {
if (i * j % 2) {
break;
}
loopCount += 1;
}
}
cout << loopCount;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A. 25 B. 16 C. 10 D. 9
查看解析
答案:C
考纲知识点: 循环嵌套、break语句
解析: i * j % 2为真的条件是i*j为奇数,这只有在i和j都为奇数时才发生。
- i=0,1,2:
loopCount分别增加0, 0, 1.loopCount=1. - i=3: j=0,1,2. ij=0,3,6. 当j=1时, ij=3为奇数,
break。内循环只在j=0时loopCount++。loopCount增加1。 - i=4: j=0,1,2,3.
loopCount增加4。 - i=5: j=0,1..4. j=1时
i*j=5奇数,break.loopCount增加1。 - i=6:
loopCount增加6。 - i=7: j=1时
break。loopCount增加1。 - i=8:
loopCount增加8。 - i=9: j=1时
break。loopCount增加1。 Total= 2+1+4+1+6+1+8+1 = 24. 题目代码和选项似乎不匹配,让我们重新分析。loopCount在if之后,所以只有当i*j为偶数时才会执行。 - i=0,1: lc=0
- i=2: j=0,1. 20=0, lc=1. 21=2, lc=2. (2次)
- i=3: j=0,1,2. 30=0, lc=3. 31=3,奇数,break. (1次)
- i=4: 4*j都是偶数, j=0,1,2,3. (4次)
- i=5: j=0, 50=0, lc++. j=1, 51=5, break. (1次)
- i=6: 6*j都是偶数, j=0..5 (6次)
- i=7: j=0, lc++. j=1, break. (1次)
- i=8: j=0..7 (8次)
- i=9: j=0, lc++. j=1, break. (1次) Total= 2+1+4+1+6+1+8+1 = 24. 答案依然不匹配。C(10)这个答案无法从此代码推出。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 假设下面C++代码执行过程中仅输入正负整数或0,有关说法错误的是()。
cpp
#include <iostream>
using namespace std;
int main() {
int N, Sum = 0;
cin >> N;
while (N) {
Sum += N;
cin >> N;
}
cout << Sum;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
A. 执行上面代码如果输入0,将终止循环。 B. 执行上面代码能实现所有非0整数的求和。 C. 执行上面代码第一次输入0,最后将输出0。 D. 执行上面代码将陷入死循环,可将while(N)改为while(N == -0)。
查看解析
答案:D
考纲知识点: 循环结构
解析:while(N)的循环条件等价于while(N != 0)。 A. 如果输入0,循环条件不满足,循环终止。正确。 B. 只要输入非0整数,循环就会继续,并累加到Sum,直到输入0为止。能实现求和。正确。 C. 第一次输入0,循环不执行,Sum初值为0,输出0。正确。 D. 代码不会陷入死循环,因为总可以通过输入0来终止。N == -0的写法也是错误的,-0就是0。D错误。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 执行下面的C++代码,有关说法正确的是()。
cpp
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
bool Flag = true;
for (int i = 2; i < N; i++) {
if (i * i > N) {
break;
}
if (N % i == 0) {
Flag = false;
break;
}
}
if (Flag)
cout << N << "是质数" << endl;
else
cout << N << "不是质数" << endl;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
A. 如果输入正整数,上面代码能正确判断N是否为质数。 B. 如果输入整数,上面代码能正确判断N是否为质数。 C. 如果输入大于等于0的整数,上面代码能正确判断N是否为质数。 D. 如将Flag = true修改为Flag = (N >= 2) ? true : false则能判断所有整数包括负整数、0、正整数是否为质数。
查看解析
答案:D
考纲知识点: 素数判断、程序健壮性
解析: 原始代码没有处理N<2的情况。如果输入1,循环不执行,Flag为true,会错误地输出“1是质数”。 A, B, C都因此是错误的。 D选项通过三元运算符Flag = (N >= 2) ? true : false,在循环开始前就正确处理了小于2的数,将它们的Flag直接置为false。这样修改后,代码对于所有整数都能给出(关于质数定义的)正确判断。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 下面C++代码用于实现如下图所示的效果,其有关说法正确的是()。
(图显示一个乘法表示例)
cpp
#include <iostream>
using namespace std;
int main() {
for(int i = 1; i < 6; i++) { //L1
for (int j = 1; j < i + 1; j++) { //L2
cout << i * j << " ";
}
cout << endl;
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
A. 当前代码能实现预期效果,无需调整代码。 B. 如果cout << endl;移到循环L2内部,则可实现预期效果。 C. 如果cout << endl;移到循环L1外部,则可实现预期效果。 D. 删除cout << endl;行,则可实现预期效果。
查看解析
答案:A
考纲知识点: 循环嵌套、格式化输出
解析: 外层循环控制行,内层循环控制每行的内容。内层循环结束后,用cout << endl;进行换行。这是打印二维图形的经典结构,代码逻辑完全正确,能实现预期的金字塔效果。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 下面C++代码执行后,输出是()。
cpp
#include <iostream>
using namespace std;
int main() {
int cnt1 = 0, cnt2 = 0;
for (int i = 0; i < 10; i++) {
if (i % 2 == 0)
continue;
if (i % 2)
cnt1 += 1;
else if (i % 3 == 0)
cnt2 += 1;
}
cout << cnt1 << " " << cnt2;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A. 5 2 B. 5 0 C. 0 2 D. 0 0
查看解析
答案:B
考纲知识点: continue语句
解析:
if (i % 2 == 0) continue;这条语句会跳过所有i为偶数的情况。- 只有当
i为奇数(1, 3, 5, 7, 9)时,才会执行后面的代码。 - 对于所有奇数,
if (i % 2)总是为真,所以cnt1会增加。 else if部分永远不会被执行。i为奇数的有5个(1,3,5,7,9),所以cnt1最终为5。cnt2一直为0。- 输出为
5 0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 在下面的C++代码中,N必须是小于10大于1的整数,M为正整数(大于0)。如果M被N整除则M为幸运数,如果M中含有N且能被N整除,则为超级幸运数,否则不是幸运数。程序用于判断M是否为幸运数或超级幸运数或非幸运数。阅读下面代码,有关说法正确的是()。
cpp
#include <iostream>
using namespace std;
int main() {
int N, M, original_M;
cout << "请输入幸运数字:";
cin >> N;
cout << "请输入正整数:";
cin >> M;
original_M = M;
bool Lucky = false;
if (original_M % N == 0)
Lucky = true;
bool hasN = false;
while (M > 0) {
if (M % 10 == N) {
hasN = true;
break;
}
M /= 10;
}
if (Lucky && hasN) {
printf("%d是%d的超级幸运数!", original_M, N);
} else if (Lucky) {
printf("%d是%d的幸运数!", original_M, N);
} else {
printf("%d非%d的幸运数!", original_M, N);
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
A. 如果N输入3,M输入36则将输出:36是3的超级幸运数! B. 如果N输入7,M输入21则将输出:21是7的幸运数! C. 如果N输入8,M输入36则将输出:36非8的超级幸运数! D. 如果N输入3,M输入63则将输出:63是3的超级幸运数!
查看解析
答案:D
考纲知识点: 程序模拟、逻辑判断
解析:
- A: N=3, M=36。
36%3==0(Lucky=true)。M中含有3(hasN=true)。输出超级幸运数。A正确。 - B: N=7, M=21。
21%7==0(Lucky=true)。M中不含7(hasN=false)。输出幸运数。B正确。 - C: N=8, M=36。
36%8!=0(Lucky=false)。输出非幸运数。C错误。 - D: N=3, M=63。
63%3==0(Lucky=true)。M中含有3(hasN=true)。输出超级幸运数。D正确。 此题可能有多个正确选项,或者对"非...超级幸运数"的理解不同。但D是明确的正确执行路径。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题 (每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | × | × | × | √ | × | × | × | √ | √ | √ |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 执行C++代码cout << '9' + '1';的输出为10.。
查看解析
答案:×
考纲知识点: ASCII码
解析: 字符进行算术运算时,使用的是它们的ASCII码。'9'的ASCII码是57,'1'的ASCII码是49。所以表达式计算的是 57 + 49 = 106。输出是106。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. C++表达式-12 % 10的值为2.。
查看解析
答案:×
考纲知识点: 基本运算
解析: 取余运算结果的符号与被除数相同。-12 % 10 的结果是-2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. C++表达式int(12.56)的值为13.。
查看解析
答案:×
考纲知识点: 数据类型转换
解析: 将浮点数转换为整数时,小数部分被直接舍弃(向零取整),而不是四舍五入。所以int(12.56)的结果是12。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. C++的整型变量N被赋值为10,则语句cout << N / 3 << "-" << N % 3;执行后输出是3-1.。
查看解析
答案:√
考纲知识点: 基本运算
解析: 10 / 3是整除,结果是3。10 % 3是取余,结果是1。所以输出是 "3-1"。叙述正确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 在C++代码中,不可以将变量命名为scanf,因为scanf是C++语言的关键字.。
查看解析
答案:×
考纲知识点: 关键字
解析: scanf是C语言标准库中的一个函数名,在C++中为了兼容也可以使用。但它不是C++的关键字。虽然不推荐,但将变量命名为scanf在语法上是允许的(会覆盖库函数)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面C++代码执行后将导致死循环.。
cpp
for(int i = 0; i < 10; i++)
continue;1
2
2
查看解析
答案:×
考纲知识点: 循环结构、continue语句
解析: continue只会跳过本次循环体的剩余部分,然后继续执行下一次循环的判断和迭代。i++仍然会执行,所以循环可以正常结束。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面C++代码执行后将输出10.。
cpp
#include <iostream>
using namespace std;
int main() {
int cnt = 0;
for(int i = 0; i < 10; i++) {
for(int j = 0; j < i; j++) {
cnt += 1;
break;
}
}
cout << cnt;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
查看解析
答案:×
考纲知识点: 循环嵌套、break语句
解析: 内层循环只要一开始执行(j<i为真),就会cnt++然后break。
- i=0,1: 内循环不执行。
- i=2: j=1<2, cnt=1, break。
- i=3: j=1<3, cnt=2, break。
- ...
- i=9: j=1<9, cnt=... 内层循环最多执行1次。
i从1到9,内循环执行9次,所以cnt是9。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面C++代码执行后,将输出5.。
cpp
#include <iostream>
using namespace std;
int main() {
int cnt = 0;
for(int i = 1; i < 5; i++) {
for(int j = i; j < 5; j += i) {
if (i * j % 2) {
cnt += 1;
}
}
}
cout << cnt;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
查看解析
答案:√
考纲知识点: 程序模拟
解析:
- i=1: j=1,2,3,4. 11=1(cnt=1), 13=3(cnt=2).
- i=2: j=2,4. 2*j都是偶数.
- i=3: j=3. 3*3=9(cnt=3).
- i=4: j=4. 4*4是偶数. 此题答案存疑,按照代码执行结果是3。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下面C++代码能实现正整数各位数字之和.。
cpp
int N, Sum = 0;
cin >> N;
while (N) {
Sum += N % 10;
N /= 10;
}
cout << Sum;1
2
3
4
5
6
7
2
3
4
5
6
7
查看解析
答案:√
考纲知识点: 问题分解、循环结构
解析: N%10取个位数,N/=10去掉个位数。循环直到N为0,这是计算各位数之和的标准算法。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. GESP测试是对认证者的编程能力进行等级认证,同一级别的能力基本上与编程语言无关.。
查看解析
答案:√
考纲知识点: GESP基础知识
解析: GESP考查的是计算思维和编程解决问题的能力,这种能力是通用的,不应局限于某一种特定的编程语言。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题 (每题25分,共50分)
1. 平方之和
问题描述
小杨有n个正整数a1, a2, ..., an,他想知道对于所有的ai (1 <= i <= n),是否存在两个正整数x和y满足x*x + y*y = ai。
输入格式
第一行包含一个正整数n,代表正整数数量。 之后n行,每行包含一个正整数,代表ai。
输出格式
对于每个正整数ai,如果存在两个正整数x和y满足条件,输出Yes,否则输出No。
数据范围
1 <= n <= 10, 1 <= ai <= 10^6。
样例1
2
5
41
2
3
2
3
样例1输出
Yes
No1
2
2
解题思路
查看解题思路
题目大意: 判断一个数能否被写成两个正整数的平方和。
考纲知识点: 循环嵌套、数学问题。
解题步骤:
- 外层循环:循环n次,处理每个输入的数
a。 - 内层处理:对每个
a,需要找到是否存在x, y。- 用一个布尔变量
found初始化为false。 - 用一个
for循环来枚举第一个正整数x,x的范围从1开始,到x*x < a为止。 - 在循环中,计算出
y*y应该等于a - x*x。 - 判断
a - x*x是否是一个完全平方数。可以求其平方根y = sqrt(a - x*x),然后判断y是否为整数且y*y == a - x*x。 - 如果找到了这样的x和y,将
found设为true,并用break跳出循环。
- 用一个布尔变量
- 输出:根据
found的值,输出"Yes"或"No"。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <iostream>
#include <cmath>
using namespace std;
void solve() {
int a;
cin >> a;
bool found = false;
for (int x = 1; x * x < a; x++) {
int y_squared = a - x * x;
int y = sqrt(y_squared);
if (y > 0 && y * y == y_squared) {
found = true;
break;
}
}
if (found) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
int main() {
int n;
cin >> n;
while (n--) {
solve();
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 计数
问题描述
小杨认为自己的幸运数是正整数k(注:保证1 <= k <= 9)。小杨想知道,对于从1到n的所有正整数中,k出现了多少次。
输入格式
第一行包含一个正整数n。 第二行包含一个正整数k。
输出格式
输出从1到n的所有正整数中,k出现的次数。
数据范围
1 <= n <= 1000, 1 <= k <= 9。
样例1
25
21
2
2
样例1输出
91
解题思路
查看解题思路
题目大意: 统计数字k在1到n的所有数中总共出现了多少次。
考纲知识点: 循环嵌套、问题分解。
解题步骤:
- 初始化:读取
n和k。定义一个总计数器total_count并初始化为0。 - 外层循环:用一个
for循环遍历从1到n的每一个数i。 - 内层循环(处理每个数i):
- 用一个临时变量
temp = i。 - 用一个
while循环处理temp的每一位。循环条件是temp > 0。 - 在
while循环中,用digit = temp % 10取出个位数。 - 判断
digit是否等于k。如果是,total_count加1。 - 用
temp /= 10去掉个位数。
- 用一个临时变量
- 输出:所有循环结束后,输出
total_count。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <iostream>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
int total_count = 0;
for (int i = 1; i <= n; i++) {
int temp = i;
while (temp > 0) {
if (temp % 10 == k) {
total_count++;
}
temp /= 10;
}
}
cout << total_count << endl;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限